// 循环条件设计：图书超期罚款计算（避免无限循环）
object LoopConditionDemo extends App {
  // 罚款规则：每天0.5元，最多不超过图书价格的30%
  val bookPrice = 50.0    // 图书价格
  val maxFineRate = 0.3   // 最大罚款比例
  val maxFine = bookPrice * maxFineRate  // 最大罚款金额（50*0.3=15元）
  val dailyFine = 0.5     // 每日罚款金额

  var overDays = 25       // 模拟超期天数（25天，远超最大罚款所需天数）
  var totalFine = 0.0     // 累计罚款金额

  // 循环条件设计：超期天数>0 且 累计罚款<最大罚款（双条件避免无限循环）
  while (overDays > 0 && totalFine < maxFine) {
    // 计算当天罚款：不超过剩余可罚金额（避免总罚款超上限）
    val fineForDay = math.min(dailyFine, maxFine - totalFine)
    totalFine += fineForDay  // 累计罚款更新
    overDays -= 1            // 超期天数递减（修改循环条件）

    // 打印每日计算结果
    println(f"已计算1天罚款: $fineForDay%.2f元, 累计: $totalFine%.2f元, 剩余超期天数: $overDays")
  }

  // 循环结束后处理
  if (totalFine >= maxFine) {
    println(f"\n已达到最大罚款金额($maxFine%.2f元), 停止计算")
  } else {
    println(s"\n所有超期天数已计算完毕")
  }
  println(f"最终罚款金额: $totalFine%.2f元")  // 最终输出15.00元
}
